/**
 * 检查数组的第一个元素，根据类型转换为数字，或者返回默认值
 * @param arr - 一个数组，其元素类型可以是字符串或数字，也可以是未定义的
 * @param defaultValue - 默认值，当数组不存在或为空时返回
 * @return 数组第一个元素转换后的数字，或者默认值
 */
function parseHead(arr: (string | number | undefined)[] | undefined, defaultValue: number): number {
    if (arr === undefined || arr === null) return defaultValue;

    for (const item of arr) {
        if (typeof item === 'number' && !isNaN(item)) {
            return item;
        } else if (typeof item === 'string') {
            const num = parseFloat(item);
            if (!isNaN(num)) {
                return num;
            }
        }
    }
    return defaultValue;
}

/**
 * 计算任意数量的数字或数字字符串的总和
 *
 * 此函数接受一个可变参数列表，其中包含数字或数字字符串。
 * 对于每个参数，如果它是一个数字字符串，它将被转换为浮点数。
 * 所有参数（无论是原始数字还是转换后的数字）都将被添加到总和中。
 * 如果传入的参数不是数字或数字字符串（即无法转换为数字），则它将被视为 0，并计入总和。
 *
 * @param {...(number | string)} args - 一个或多个数字或数字字符串
 * @return 所有有效数字参数的总和
 */
function sum(...args: (number | string | undefined)[]): number {
    let sum = 0;
    for (const arg of args) {
        // Convert each argument to number
        let num: number;
        if (arg === undefined) {
            num = 0; // Treat undefined as 0
        } else {
            num = typeof arg === 'string' ? parseFloat(arg) : arg as number;
        }
        // Check if it's a valid number
        if (!isNaN(num)) {
            sum += num;
        } else {
            // If it's not a valid number (NaN), add 0
            sum += 0;
        }
    }
    return sum;
}

export default {parseHead, sum}